﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;
using Microsoft.Xna.Framework;

namespace Newton.GameStates
{
    class Level01
    {

        #region "Atributos"

        Board screen;

        //Texture2D board;

        //Rectangle boardRect;

        //Color[] boardColors;

        GameWindow Window;

        Player player1, player2;

        #endregion

        public Level01(ContentManager Content, GameWindow Window)
        {
            this.Window = Window;

            screen = new Board(Window, Content.Load<Texture2D>("BackGround"));
            player1 = new Player(Window, Content.Load<Texture2D>("Cannon3"), Content);
            player1.playerId = 1;
            player1.Position = new Vector2(200, 200);

            player2 = new Player(Window, Content.Load<Texture2D>("Cannon3"), Content);
            player2.playerId = 2;
            player2.Position = new Vector2(500, 200);
        }
        public void Update(GameTime gameTime)
        {
            player1.Update(gameTime, Game1.keyboardState);

            screen.Update(gameTime, Game1.keyboardState, player1);
        }

        public void Draw(GameTime gameTime, SpriteBatch spriteBatch)
        {
            screen.Draw(gameTime, spriteBatch);
            
            
            player1.Draw(gameTime, spriteBatch);
            //player1.Draw(gameTime, spriteBatch,SpriteEffects.FlipHorizontally,0,Vector2.Zero,0);

            player2.Draw(gameTime, spriteBatch, 0);
                                   
        }

        // Determina se há sobreposição dos pixels não-transparentes entre os dois retangulos
        public bool ColisaoPorPixel(Rectangle j1, Rectangle j2, Color[] c1, Color[] c2)
        {
            // Encontra os limites do retangulo de interseção
            int cima = Math.Max(j1.Top, j2.Top);

            int baixo = Math.Min(j1.Bottom, j2.Bottom);

            int esquerda = Math.Max(j1.Left, j2.Left);

            int direita = Math.Min(j1.Right, j2.Right);

            // Verifica todos os pontos dentro do limite de intereseção 
            //TODO verificar se os retangulos estao um ao lado do outro
            for (int y = cima; y < baixo; y++)
            {
                for (int x = esquerda; x < direita; x++)
                {
                    // Verifica a cor de ambos os pixels neste momento
                    Color color1 = c1[(x - j1.Left) +
                    (y - j1.Top) * j1.Width];
                    Color color2 = c2[(x - j2.Left) +
                    (y - j2.Top) * j2.Width];

                    // Se ambos os píxels não são completamente diferentes
                    //if (color1.A != 0 && color2.A != 0)
                    //{
                    //    // Um cruzamento de pixel foi encontrado
                    //    return true;
                    //}
                    if (color1.R == 255 && color1.G == 255 && color1.B == 0 &&
                             color2.R == 88 && color2.G == 74 && color2.B == 138)
                    {

                        return true;
                    }
                }
            }
            // Não foi encontrado cruzamento entre os pixels
            return false;
        }
    }
}
